#ifndef USTRING_H
#define USTRING_H

#include <assert.h>
#include <string.h>

class ustring {
public:
    ustring();
    ustring(const ustring &);
    ustring(const char *);

    ~ustring()
    {
        if(NULL != _str)
        {
            delete [] _str;
            _str = NULL;
        }
    }

    ustring  operator+(const ustring &);
    ustring  operator+(const char *);

    ustring& operator=(const ustring &);
    ustring& operator=(const char *);

    bool operator==(const ustring &rhs)
    {
        if(_len != rhs._len) return false;

        return strcmp(_str, rhs._str) ? false : true;
    }

    bool operator==(const char *rhs)
    {
        return strcmp(_str, rhs) ? false : true;
    }

    char& operator[ ](int sz)
    {
        return _str[sz];
    }
    char& at(int sz)
    {
        assert((sz >= 0) && (sz < _len));
        return _str[sz];
    }

    int size(void) const
    {
        return _len;
    }
    const char* c_str(void) const
    {
        return _str;
    }

private:
    int _len;
    char *_str;
};

#endif // USTRING_H

